package com.tedu.API.thread;

/**
 * 线程: 单线程  多线程
 * 单线程: 一次性按照顺序执行一个操作
 * 多线程: 创建多条线程，做不同的事情
 * 多线程并发: 创建多条线程，"同时"做相同的事情
 *
 * 案例: 创建一个Chef类  实现 Runnable
 *                     私有属性  dishName
 *                     run()功能: {提示语句: 开始准备+disName
 *                                模拟准备时间:  阻塞 1~3秒
 *                                Math.random()随机生成0.0~1.0的浮点数值 (不包含1.0)
 *                                     提示语句: dishName+准备完成
 *                                     }
 *             主方法  实现 创建两个线程  chef1  【不需要Lambda】
 *                                    chef2
 */
public class kitchen {
    public static void main(String[] args) {
        //第一位厨师---西红柿炒鸡蛋
        Thread chef1=new Thread(new Chef("西红柿炒鸡蛋"));
        //第二位厨师---红烧肉
        Thread chef2=new Thread(new Chef("红烧肉"));

        chef1.start();
        chef2.start();
    }
}
// 创建Chef【厨子】类
class Chef implements Runnable{
    private String dishName;  // 私有属性: 菜肴名
    //厨子创建"同时"完成菜肴制作---构造器方法传入:区分厨师制作的菜肴
    public Chef(String dn){
        this.dishName=dn; //厨师来了  this.dishName="红烧肉"
                          //this当前对象-->Chef
    }
    @Override
    public void run() {
        System.out.println("开始准备"+dishName);
        // 模拟准备厨子时间:1~3秒
        //1.Math.random() 随机生成0.0~1.0的浮点数值 【不包含1.0  范围:00~0.9】
        //  返回值: 0.0~0.9毫秒
        //2.Math.random()*3000, 得到范围值: 0.0~3000.0【不包括3000.0】
        //范围: 0.0~2999.0毫秒  0~2   随机范围: 0~2
        //3. *3000范围强行转换为long类型
        //  范围值: 0~2999毫秒   秒数: 0~2
        //4. +1000  Math.random()*3000+1000
        // 范围值: 1~3秒
        try {
            Thread.sleep((long) (Math.random()*3000)+1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(dishName+"准备完成~请享用~");
    }
    }
